﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL;
using Entities;
using System.IO;
using System.Diagnostics;

namespace QLTB_CTK34
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
			
        }
        #region Form Load, Hiển Thị Giao Diện,sự kiện form
        string username, MaTK;
       
        void Load_frmDangNhap()
        {
            var dlDangnhap = new FrmDangNhap();
            dlDangnhap.ShowDialog();
           // dlg = dlDangnhap.DialogResult;
            if (dlDangnhap.LoginSuccess)
            {
                closing = true;
                MyAccount.account = QLTaiKhoan.FindByUserName(dlDangnhap.txtUsername.Text);
                MyAccount.account.TrangThai = "online";
                MyAccount.account.LanCuoiDangNhap = DateTime.Now;
                MyAccount.account.MayDangNhap = System.Environment.MachineName;
				QLNhatKy.ThemNhatKy("dang nhap");
                QLTaiKhoan.Update(MyAccount.account);
                username = dlDangnhap.txtUsername.Text;
                MaTK = QLTaiKhoan.FindByCondition(x => x.TenDangNhap == dlDangnhap.txtUsername.Text).ToArray()[0].MaTK;
                LoadPhanQuyen();
                LoadGiaoDien();
				CapNhapTTCN();
                #region timer auto load
                timerLoadGiaoDien.Interval = 1000;
                timerLoadGiaoDien.Tick +=new EventHandler(timerLoadGiaoDien_Tick);
                timerLoadGiaoDien.Enabled = true;
                timerLoadGiaoDien.Start();
                #endregion
            }
            else
            {
                Application.Exit();
            }
        }
        /// <summary>
        /// sự kiện load lại giao diện.
        /// </summary>
        int load = 0;
        private void timerLoadGiaoDien_Tick(object sender, EventArgs e)
        {
            load++;
            if (load == 5)
            {
                LoadTinhTrang();
                load = 0;
            }
        }
        /// <summary>
        /// Form Load.
        /// </summary>
		private void FrmMain_Load(object sender, EventArgs e)
		{
			Load_frmDangNhap();
            
		}
       
        void LoadPhanQuyen()
        {
            thiếtBịToolStripMenuItem.Visible = PhanQuyen.CheckNhomQuyen(MyAccount.account.MaTK, "QLTB");
            tàiKhoảnToolStripMenuItem.Visible = PhanQuyen.CheckNhomQuyen(MyAccount.account.MaTK, "QLTK");
            LỗiThiếtBịToolStripMenuItem.Visible = PhanQuyen.CheckNhomQuyen(MyAccount.account.MaTK, "QLThongBaoLoiTB");
            đềXuấtToolStripMenuItem.Visible = PhanQuyen.CheckNhomQuyen(MyAccount.account.MaTK, "QLDX");
            bảoTriToolStripMenuItem.Visible = PhanQuyen.CheckNhomQuyen(MyAccount.account.MaTK, "QLKQBaoTriTB");
            nhậtKýNgườiDùngToolStripMenuItem.Visible = PhanQuyen.CheckNhomQuyen(MyAccount.account.MaTK, "QLNhatKy");
            gửiLỗiThiếtBịToolStripMenuItem1.Visible = PhanQuyen.CheckQuyenSuDung(MyAccount.account.MaTK, "GuiLoiTB");
            gửiĐềXuấtToolStripMenuItem.Visible = PhanQuyen.CheckQuyenSuDung(MyAccount.account.MaTK, "GuiDX");
        }
        /// <summary>
        /// bắt sự kiện form closing .
        /// </summary>
        private bool closing = false;
        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (closing && this.WindowState == FormWindowState.Normal)
            {
                notifyIcon1.Visible = true;
                this.Hide();
                e.Cancel = true;
                closing = false;
            }
        }
        #region Load Giao Diện
        private void LoadGiaoDien()
        {
           
            IEnumerable<Control> usercol = tabPageA61.Controls.Cast<Control>().Where(x => x is UserControl);
           // the sự kiện cho control
            lvthongtin.Visible = false;
            usercol.ToList().ForEach(x => x.Controls.Cast<Control>().Where(k => k is Button).ToList().ForEach(i => 
                {
                    i.Click += new EventHandler(CV41_Click);
                    i.MouseHover += new EventHandler(CV41_MouseHover);
                }));
            LoadTinhTrang();
        }

        private void LoadTinhTrang()
        {
            Generic.Reconnect();
            IEnumerable<Control> usercol = tabPageA61.Controls.Cast<Control>().Where(x => x is UserControl);
            usercol.ToList().ForEach(x => x.Controls.Cast<Control>().Where(k => k is Button).ToList()[0].Text = x.Tag != null ? x.Tag.ToString() : "");
            //usercol.ToList().ForEach(x => x.Tag = x.Name);
            //Load online
            usercol.ToList().ForEach(x => x.Controls.Cast<Control>().Where(k => k is Button).ToList().ForEach(o => o.BackgroundImage = Image.FromFile("images\\imac_off.png")));
            IEnumerable<TaiKhoan> tk = QLTaiKhoan.GetAll();
            usercol.ToList().Where(x => tk.Where(k => (x.Tag != null && k.MayDangNhap == x.Tag.ToString()) && k.TrangThai == "online").Count() == 1).ToList().ForEach(x => x.Controls.Cast<Control>().Where(k => k is Button).ToList().ForEach(o => o.BackgroundImage = Image.FromFile("images\\imac_default.png")));
            //usercol.ToList().Where(x => tk.Where(k => (k.MayDangNhap == x.Name||k.MayDangNhap == x.Tag.ToString() ) && k.TrangThai == "online").Count() == 1).ToList().ForEach(x => x.Controls.Cast<Control>().Where(k => k is Button).ToList().ForEach(o => o.BackgroundImage = Image.FromFile("images\\imac_default.png")));
            //Load Tình Trạng
            IEnumerable<MayTinh> mt = QLThietBi.GetAllMT();
            usercol.ToList().ForEach(x => x.Controls.Cast<Control>().Where(k => k is Label).ToList().ForEach(k =>
            {

                k.Text = mt.Where(i => i.MaMT == x.Name).Count() > 0 ? mt.Where(i => i.MaMT == x.Name).ToList()[0].ThietBi.TinhTrang.Trim(' ') : "Tình Trạng";
                x.Width = k.Width;
            }));
        }
        #endregion
        #endregion
        #region Toolstrip
        /// <summary>
        /// các Toolstip click vào hiện thì form thiệt bị,gưi lỗi thiết bị,đề xuất,bảo trì,hướng dẫn sử dụng,tài khoản,gửi lỗi thiết bị,gửi đề xuất.
        /// </summary>
        private void thiếtBịToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmQuanLiThietBi tb = new FrmQuanLiThietBi();
            tb.ShowDialog();
        }

        private void kiểmTraServerToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// Đăng Xuất Form.
        /// </summary>
        private void đăngXuấtToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
            notifyIcon1.Visible = false;
            if (MyAccount.account != null)
            {
                MyAccount.account.TrangThai = "offline";
                MyAccount.account.MayDangNhap = "";
                QLTaiKhoan.Update(MyAccount.account);
                MyAccount.account = null;
            }
            Load_frmDangNhap();
            this.Show();

        }

        private void gửiLỗiThiếtBịToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmQuanLiThongBaoLoiThietBi tbltb = new FrmQuanLiThongBaoLoiThietBi();
            tbltb.ShowDialog();
        }

        private void đềXuấtToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmQuanLiDeXuat dx = new FrmQuanLiDeXuat();
            dx.ShowDialog();
        }

        private void bảoTriToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmQuanLiKQBaoTriTB kqbt = new FrmQuanLiKQBaoTriTB();
            kqbt.ShowDialog();
        }

        private void hướngDẫnSửDụngToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void tàiKhoảnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmQuanLytaiKhoan tk = new FrmQuanLytaiKhoan();
            tk.ShowDialog();
        }

		private void gửiLỗiThiếtBịToolStripMenuItem1_Click(object sender, EventArgs e)
		{
			FrmGuiLoiTB gltb = new FrmGuiLoiTB();
			gltb.ShowDialog();
		}

		private void gửiĐềXuấtToolStripMenuItem_Click(object sender, EventArgs e)
		{
			FrmThemDX tdx = new FrmThemDX();
			tdx.ShowDialog();
		}

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            (new FrmAbout()).ShowDialog();
        }

        private void hướngDẫnSửDụngToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            ThuVien.TRY_CATCH(() =>
            {
                Process.Start("Help.chm");
            });
        }
        /// <summary>
        /// click vao toolstrip nhật ký người sử dụng hiển thị form nhật kỹ người sử dụng.
        /// </summary>
        private void nhậtKýNgườiDùngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmQuanLiNhatKySuDung nk = new FrmQuanLiNhatKySuDung();
            nk.ShowDialog();
        }
        /// <summary>
        /// click vao Toolstrip thống kê hiển thị form thống kê.
        /// </summary>
        private void thốngKêToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmThongKe tk = new FrmThongKe();
            tk.ShowDialog();
        }
        /// <summary>
        /// click vao toolstrip exit thoát form.
        /// </summary>
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            thoátToolStripMenuItem.PerformClick();
        }
        #endregion
        #region Cập Nhập Thông Tin Cá Nhân
        ThongTinNguoiDung ttcn = new ThongTinNguoiDung();
        private void CapNhapTTCN()
        {
			ttcn = MyAccount.account.ThongTinNguoiDung;
            txtMaSo.Text = MaTK;
            if( ttcn!=null)
            {
                
                txtHo.Text = ttcn.Ho;
                txtTen.Text = ttcn.Ten;
                dtpNgaySinh.Text = ttcn.NgaySinh.Value.ToShortDateString();
                txtDT.Text = ttcn.SDT.ToString();
                txtCMND.Text = ttcn.CMND;
                txtChucVu.Text = ttcn.ChucVu;
            }
        }
        private void GetTTCN()
        {
            ttcn.Ho=txtHo.Text;
            ttcn.Ten = txtTen.Text;
            ttcn.NgaySinh =dtpNgaySinh.Value;
            ttcn.SDT =char.IsNumber(txtDT.Text,txtDT.Text.Length-1) ? int.Parse(txtDT.Text): (int?) null;
            ttcn.CMND = txtCMND.Text;
            ttcn.ChucVu=txtChucVu.Text;
        }
        private void btnCNTTCN_Click(object sender, EventArgs e)
        {
            if (ttcn == null)
            {
                GetTTCN();
                if (!Generic.Insert<ThongTinNguoiDung>(ttcn))
                {
                    MessageBox.Show("Cập Nhập Không Thành Công");
                    return;
                }
            }
            else
            {
                GetTTCN();
                if (Generic.EditByCondition<ThongTinNguoiDung>(x => x.MaTK == ttcn.MaTK, x => x = ttcn) == 0)
                {
                    MessageBox.Show("Cập Nhập Không Thành Công");
                    return;
                }
                
            }
            MessageBox.Show("Cập Nhập Thành Công");
        }

        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabControl1.SelectedTab == tabPageTTCN)
                CapNhapTTCN();
        }
        private bool KiemTraTDMK()
        {
            if (txtMKCu.Text != QLTaiKhoan.FindByID(MaTK).MatKhau)
            {
                MessageBox.Show("Mật Khẩu Cũ không Đúng!");
                return false;
            }
            else if (string.IsNullOrEmpty(txtPass.Text))
            {
                MessageBox.Show("Mật Khẩu Mới Trống!");
                return false;
            }
            else if (txtPass.Text != txtPass2.Text)
            {
                MessageBox.Show("Mật Khẩu Mới Nhập Không Trùng Khớp Nhập Lại !");
                return false;
            }

            return true;
                
        }
        private void btnThayDoiMK_Click(object sender, EventArgs e)
        {
            if (KiemTraTDMK())
            {
                if (QLTaiKhoan.updateMK(MaTK, txtPass.Text) > 0)
                    MessageBox.Show("Thay Đổi Mật Khẩu Thành Công");
                else
                    MessageBox.Show("Thay Đổi Mật Khẩu Không Thành Công Thành Công");
            }
        }
        #endregion
        #region Hiện Thị Thông Tin 
        private void CV41_Click(object sender, EventArgs e)
        {
            FormThongTinChiTiet ttct = new FormThongTinChiTiet((sender as Button));
            ttct.ShowDialog();
            
        }
        Point c;
        Point k;
        string MaMT;
        private void CV41_MouseHover(object sender, EventArgs e)
        {
            MaMT = (sender as Control).Text;
            
            timer1.Interval = 1000;
            timer1.Enabled = true;
            timer1.Tick+=new EventHandler(timer1_Tick);

            
        }

        private void tabPageA61_MouseMove(object sender, MouseEventArgs e)
        {
            c = e.Location;
            if (c != k)
            {
                ResetLVTT();
                lvthongtin.Visible = false;
            }
        }
        private void ResetLVTT()
        {
            lvthongtin.Items[0].Text = "Trạng Thái: ";
            lvthongtin.Items[1].Text = "Tên Tài Khoản: ";
            lvthongtin.Items[2].Text = "Lần Cuối Đăng Nhập: ";
            lvthongtin.Items[3].Text = "Tình Trạng: ";
            lvthongtin.Width = 130;
        }
        int count = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            count++;
            if (count == 2)
            {
                ResetLVTT();
                if (c.X > 710 && c.Y > 300)
                    lvthongtin.Location = new Point(c.X - 100, c.Y - 50);
                else if (c.X > 710)
                    lvthongtin.Location = new Point(c.X - 100, c.Y);
                else if (c.Y > 300)
                    lvthongtin.Location = new Point(c.X, c.Y - 50);
                else
                    lvthongtin.Location = new Point(c.X, c.Y);
                lvthongtin.Visible = true;

                //string mamt = (sender as Control).Text;
                IEnumerable<ThietBi> tb = QLThietBi.FindByCondition(x => x.MayTinhs.Count > 0 && x.MayTinhs[0].MaMT == MaMT);
                IEnumerable<TaiKhoan> tk = QLTaiKhoan.FindByCondition(x => x.MayDangNhap == MaMT && x.TrangThai.ToLower() == "online");
                if (tb.Count() > 0)
                    lvthongtin.Items[lvthongtin.Items.Count - 1].Text += tb.First().TinhTrang;
                if (tk.Count() > 0)
                {
                    lvthongtin.Items[0].Text += " online";
                    lvthongtin.Items[1].Text += tk.First().TenDangNhap;
                    lvthongtin.Items[2].Text += tk.First().LanCuoiDangNhap;
                    lvthongtin.Width += 85;
                }
                k = c;

                timer1.Stop();
                count = 0;
            }

        }
        #endregion
        #region notify icon
        /// <summary>
        /// click vao notify icon hiện thị form hoặc thoát form.
        /// </summary>
		private void xemToolStripMenuItem_Click(object sender, EventArgs e)
		{
            notifyIcon1.Visible = false;
            closing = true;
			this.Visible = true;
			this.WindowState = FormWindowState.Normal;
		}

		private void thoátToolStripMenuItem_Click(object sender, EventArgs e)
		{
            closing = false;
			Application.Exit();
		}

		private void FrmMain_Resize(object sender, EventArgs e)
		{
            //if (this.WindowState == FormWindowState.Minimized)
            //    this.Hide();
		}

		private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
		{
            xemToolStripMenuItem.PerformClick();
		}

        #endregion

        
    }
}